/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.groupb.circus.UserInterface;

/**
 *
 * @author Projecte
 */

import com.sun.media.jai.codec.JPEGEncodeParam;
import java.awt.image.renderable.*;
import java.io.*;
import javax.media.jai.InterpolationNearest;
import javax.media.jai.JAI;
import javax.media.jai.KernelJAI;
import javax.media.jai.LookupTableJAI;
import javax.media.jai.PlanarImage;
//import javax.media.jai.*;
//import com.sun.media.jai.codec.*;



/*
 *
 */
public class Imatge {
    
    

    private static JPEGEncodeParam encodeParam = null;


   

   /*
    * Funcion que se encarga de variar la calidad de la imagen y de almacenarla
    */
    public static void encodeImage(PlanarImage image, FileOutputStream out, float quality, String archivo){


                    try {

                        encodeParam = new JPEGEncodeParam();
                        encodeParam.setQuality(quality); // Indica la calidad de la imagen
                        JAI.create("encode", image, out, "JPEG", encodeParam);// Le asigna el valor de la calidad a la imagen
                        /*
                         * Almacen la imagen con el nombre que hayamos pasado como parametro
                         * El formato del parametro tiene que ser con extension, es decir
                         * imagen_prueba.jpeg
                         */
                        JAI.create("filestore", image,archivo,"JPEG", encodeParam);
                        out.close();
     
                    } catch (IOException e) {
                        System.out.println("IOException at encoding..");
                        System.exit(1);
                    }


            }// cierra la clase encodeimage






private static PlanarImage scaleImage (PlanarImage image, float scaleX, float scaleY){

                        ParameterBlock params = new ParameterBlock();
                        params.addSource(image);
                        params.add(scaleX);
                        params.add(scaleY);
                        params.add(0.0F);
                        params.add(0.0F);
                        params.add(new InterpolationNearest());

                        image= JAI.create("scale",params, null);

                        return image;
          }


private static PlanarImage convolveImage (PlanarImage image){


//float[] matrix = { -1.0F, -2.0F, -1.0F, 0.0F, 0.0F, 0.0F, 1.0F, 2.0F, 1.0F };
 float[] matrix = { 1/9.0F, 1/9.0F, 1/9.0F, 1/9.0F, 1/9.0F, 1/9.0F, 1/9.0F, 1/9.0F, 1/9.0F };
    KernelJAI kernel = new KernelJAI(3,3,matrix);
    image = JAI.create("convolve", image, kernel);
    return image;

}

    public static PlanarImage contrastImage(PlanarImage image, int contrast){

         ParameterBlock param = new ParameterBlock();
        param.addSource(image);
        byte lookUpTableData[];
        lookUpTableData = new byte[256];
        for(int i = 0; i < 256; i++){
                lookUpTableData[i] = clampByte(i + contrast);
        }

        LookupTableJAI lookUp = new LookupTableJAI(lookUpTableData);
        param.add(lookUp);

        image = JAI.create("lookup", param, null);

        return image;

}

    private static byte clampByte(int i) {
        if(i > 255)
                return -1;
        if(i < 0)
                return 0;
        else
                return (byte)i;
    }










     private static void guardarImage(PlanarImage image, FileOutputStream out, String archivo){


                    try {

                        encodeParam = new JPEGEncodeParam();
                        JAI.create("filestore", image,archivo,"JPEG", encodeParam);
                        out.close();
                    } catch (IOException e) {
                        System.out.println("IOException at encoding..");
                        System.exit(1);
                    }


            }





}

